#include <iostream>

class Base
{
public:
    virtual void show()
    {
    }
};

class Derived : public Base
{
public:
    void show()
    {
    }
};

int main()
{
    // c语言是弱类型的语言:强制类型转换 没有类型检查机制->存在安全隐患
    // c++强类型: 安全的类型转换

    // 静态转换
    // 基础数据类型
    // 指针转换:指针转换中不允许不同类型的指针的转换 void* 和 其他类型的指针 之间的转换
    // 可以进行父子指针的转换，不进行转换的安全检查
    //  int a=10;
    //  int *p= &a;
    //  void *b= static_cast<void*>(p);
    //  std::cout<<b<<std::endl;

    // 动态转换
    // 用于父子指针转换
    // 在运行时进行判断，如果转换不安全，返回空指针
    Base *b= new Base;
    Derived *d= new Derived;
    Base *p= dynamic_cast<Derived*>(b);
    std::cout<<p<<std::endl;


    // 常量转换
    // 把一个const转换成非const
    // const int a = 10;
    // int *p1 = const_cast<int *>(&a);
    // *p1= 20;
    // std::cout<<a<<std::endl;

    //reintpret_cast
    //重解释转换 -> 强制类型转换
    //不推荐用
    int *a= new int(1);

    double *c= reinterpret_cast<double*>(a);
    std::cout<<*c<<std::endl;

    return 0;
}